/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Controller.SejourController;
import java.util.Date;
import java.util.LinkedList;

/**
 *
 * @author Hugo
 */
public class Sejour extends AbstractModel {
    private int _numSejour;
    private Date _dteDebut;
    private Date _dteFin;
    private LinkedList<Chambre> _listeChambre;
    
    //constructeurs
    public Sejour(){
        _numSejour = Agenda.getInstance().getNextIdSejour();
        _dteDebut = new Date();
        _dteFin = new Date();
        _listeChambre = new LinkedList<>();
    }
    
    public Sejour(int numSejour){
        _numSejour = numSejour;
        _dteDebut = new Date();
        _dteFin = new Date();
        _listeChambre = new LinkedList<>();
    }
    
    public Sejour(int numSejour,Date dteDebut, Date dteFin, LinkedList<Chambre> listeChambre){
        _numSejour = numSejour;
        _dteDebut = dteDebut;
        _dteFin = dteFin;
        _listeChambre = listeChambre;
    }
    
    public void updateWrongRoom(){
        
    }
    public LinkedList<Chambre> getListeChambre(){
        return _listeChambre;
    }
    
    public int getNum(){
        return _numSejour;
    }
    
    public Date getDateDebut(){
        return _dteDebut;
    }
    
    public Date getDateFin(){
        return _dteFin;
    }
    
    public void setDateDebut(Date dteDebut){
        _dteDebut = dteDebut;
    }
    
    public void setDateFin(Date dteFin){
        _dteFin = dteFin;
    }
    
    public void updateListeChambre(){
        String[][] data = create2DString(_listeChambre);
        firePropertyChange(SejourController.LISTE_CHAMBRE_PROPERTY, _listeChambre, data);
    }
    
    
    public void addChambre(Chambre chambre){
        LinkedList<Chambre> oldListeChambre = this._listeChambre;
        _listeChambre.add(chambre);

        String[][] data = create2DString(_listeChambre);
        firePropertyChange(SejourController.ADD_CHAMBRE, oldListeChambre, data);
        
       
    }
    
    public void updateSejour() {
        Agenda.getInstance().updateSejour(this);
    }
    
    private String[][] create2DString(LinkedList<Chambre>  liste){
        String[][] data = new String[liste.size()][2];
        for(int i=0; i < liste.size(); i++)
        {
            data[i][0] = Integer.toString(liste.get(i).getNumeroChambre());
            data[i][1] = liste.get(i).getCategorie().getNomCategorie();
        }
        
        return data;
    }
    
    public void changeChambre(Integer oldChambre, Integer newChambre){
         for(int i = 0; i < _listeChambre.size(); i++){
            Chambre chambre = _listeChambre.get(i);
            if(chambre.getNumeroChambre() == oldChambre){
                _listeChambre.set(i,TestData.getChambre(newChambre));
                break;
            }
        }
        firePropertyChange(SejourController.CHANGE_CHAMBRE_PROPERTY, null, _listeChambre);
    }
}
